//package com.plian.system.service.fr.bankbalance;
//
//import com.alibaba.fastjson.JSONArray;
//import com.plian.Tools.TokenUtil;
//import com.plian.Tools.Tools;
//import com.plian.Tools.UploadUtil;
//import com.plian.Tools.UuidUtil;
//import com.plian.Tools.pagedata.PageData;
//import com.plian.system.dao.fr.bankbalance.BankBalanceDao;
//import com.plian.system.dao.sys.orgzation.OrgzationDao;
//import com.plian.system.model.CommonCode;
//import com.plian.system.model.ListResult;
//import com.plian.system.model.ObjResult;
//import com.plian.system.model.page.Page;
//import org.apache.commons.lang3.exception.ExceptionUtils;
//import org.apache.poi.hssf.usermodel.HSSFWorkbook;
//import org.apache.poi.ss.usermodel.Cell;
//import org.apache.poi.ss.usermodel.Row;
//import org.apache.poi.ss.usermodel.Sheet;
//import org.apache.poi.ss.usermodel.Workbook;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.web.multipart.MultipartFile;
//import org.springframework.web.multipart.MultipartHttpServletRequest;
//
//import java.io.InputStream;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//
//@Service
//public class BankBalanceService {
//    @Autowired
//    private BankBalanceDao bankBalanceDao;
//
//    @Autowired
//    private OrgzationDao orgzationDao;
//
//    /**
//     * logger属性.
//     */
//    private static final Logger LOGGER = LoggerFactory.getLogger(BankBalanceService.class);
//
//    /*
//    保存
//    */
//    public ObjResult save(PageData pd) {
//        ObjResult objResult;
//        try {
//            List<PageData> valuelist = JSONArray.parseArray(JSONArray.toJSONString(pd.get("list")), PageData.class);
//            pd.put("orgId", TokenUtil.getTokenOrgId());
//            PageData old = bankBalanceDao.findByDate(pd);
//            if (old != null) {
//                bankBalanceDao.delete(old);
//            }
//            pd.put("id", UuidUtil.get32UUID());
//            pd.put("status", "0");
//            bankBalanceDao.save(pd);
//            for (PageData p : valuelist) {
//                p.put("id", UuidUtil.get32UUID());
//                p.put("balanceId", pd.getString("id"));
//                bankBalanceDao.saveChild(p);
//            }
//            objResult = new ObjResult(CommonCode.SUCCESS);
//        } catch (Exception e) {
//             LOGGER.error(ExceptionUtils.getStackTrace(e));
//            objResult = new ObjResult(CommonCode.ERROR);
//            return objResult;
//        }
//        return objResult;
//    }
//
//    /**
//     * 删除
//     */
//    public ObjResult delete(List<String> list) {
//        ObjResult objResult;
//        try {
//            bankBalanceDao.deleteAll(list);
//            objResult = new ObjResult(CommonCode.SUCCESS);
//        } catch (Exception e) {
//             LOGGER.error(ExceptionUtils.getStackTrace(e));
//            objResult = new ObjResult(CommonCode.ERROR);
//            return objResult;
//        }
//        return objResult;
//    }
//
//    /*
//     * 列表
//     * */
//    public ListResult<PageData> listPage(PageData pd) {
//        try {
//            if (Tools.isEmpty(pd.getString("orgId"))) {
//                pd.put("orgId", TokenUtil.getTokenOrgId());
//            }
//            Page page = new Page(true, pd);
//            List<PageData> list = bankBalanceDao.list(page);
//            ListResult<PageData> Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(list);
//            Result.setTotal(page.getTotal());
//            return Result;
//        } catch (Exception e) {
//             LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }
//
//    /*
//详情
//*/
//    public ObjResult detail(PageData pd) {
//        ObjResult objResult;
//        try {
//            PageData pddetail;
//            if (Tools.notEmpty(pd.getString("id"))){
//                pddetail = bankBalanceDao.findById(pd);
//                pddetail.put("childList", bankBalanceDao.findByParentId(pd.getString("id")));
//            }else {
//                pddetail = bankBalanceDao.findByDate(pd);
//                if (pddetail!=null&&Tools.notEmpty(pddetail.getString("id"))){
//                    pddetail.put("childList", bankBalanceDao.findByParentId(pddetail.getString("id")));
//                }
//
//            }
//
//            objResult = new ObjResult(CommonCode.SUCCESS);
//            objResult.setPageData(pddetail);
//        } catch (Exception e) {
//             LOGGER.error(ExceptionUtils.getStackTrace(e));
//            objResult = new ObjResult(CommonCode.ERROR);
//            return objResult;
//        }
//        return objResult;
//    }
//    /*
//提取上月数据
//*/
//    public ListResult<PageData> getLastMonthValue(PageData pd) {
//        try {
//            int year = new Integer(pd.getString("year"));
//            int month = new Integer(pd.getString("month"));
//            if (month == 1){
//                year--;
//                month =12;
//                pd.put("year",year);
//                pd.put("month",month);
//            }else {
//                month--;
//                pd.put("month",month);
//            }
//            PageData pddate = bankBalanceDao.findByDate(pd);
//            if (pddate==null){
//                ListResult<PageData> Result = new ListResult<>(CommonCode.FAIL);
//                Result.setMessage("上月没有数据");
//                return Result;
//            }
//           List<PageData> valueList = bankBalanceDao.findByParentId(pddate.getString("id"));
//            ListResult<PageData> Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(valueList);
//            return Result;
//        } catch (Exception e) {
//             LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }
//    /*
//汇总表
//*/
//    public ObjResult reportSelect(PageData pd){
//        ObjResult objResult;
//        try {
//            List<PageData> units = orgzationDao.findGZWUnits();
//            pd.put("unitList",units);
//            List<PageData> periods = bankBalanceDao.listPeriod(pd);
//            pd.put("periodList",periods);
//            objResult = new ObjResult(CommonCode.SUCCESS);
//            objResult.setPageData(pd);
//        } catch (Exception e) {
//             LOGGER.error(ExceptionUtils.getStackTrace(e));
//            objResult = new ObjResult(CommonCode.ERROR);
//            return objResult;
//        }
//        return objResult;
//    }
//    public ListResult<PageData> report1(PageData pd) {
//        try {
//            List<PageData> units = orgzationDao.findGZWUnits();
//            String ids = "";
//            for (PageData unit:units){
//                if ("".equals(ids)){
//                    ids +="'"+unit.getString("id")+"'";
//                }else {
//                    ids +=",'"+unit.getString("id")+"'";
//                }
//            }
//            pd.put("ids",ids);
//            List<PageData> valueList = bankBalanceDao.report1(pd);
//            ListResult<PageData> Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(valueList);
//            return Result;
//        } catch (Exception e) {
//             LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }
//
//    public ObjResult report2(PageData pd) {
//        ObjResult objResult;
//        try {
//            String values = "sum(a.depositBalance) as 合计depositBalance" +
//                    ",sum(a.loanBalance) as 合计loanBalance" +
//                    ",convert(sum(a.depositBalance)/sum(a.loanBalance)*100,decimal(18,2)) as 合计rate" +
//                    ",sum(a.bank) as 合计bankCount";;
//            List<PageData> bankList = bankBalanceDao.listBank(pd);
//            for (PageData bank:bankList){
//                if ("".equals(values)){
//                    values+="max(CASE a.bank WHEN '"+ bank.getString("bankName")+"' THEN a.depositBalance ELSE 0 END) as " +bank.getString("bankName")+"depositBalance" +
//                            ",max(CASE a.bank WHEN '"+ bank.getString("bankName")+"' THEN a.loanBalance ELSE 0 END) as " +bank.getString("bankName")+"loanBalance" +
//                            ",max(CASE a.bank WHEN '"+ bank.getString("bankName")+"' THEN a.rate ELSE 0 END) as " +bank.getString("bankName")+"rate" +
//                            ",max(CASE a.bank WHEN '"+ bank.getString("bankName")+"' THEN a.bankCount ELSE 0 END) as " +bank.getString("bankName")+"bankCount";
//                }else {
//                    values+=",max(CASE a.bank WHEN '"+ bank.getString("bankName")+"' THEN a.depositBalance ELSE 0 END) as " +bank.getString("bankName")+"depositBalance" +
//                            ",max(CASE a.bank WHEN '"+ bank.getString("bankName")+"' THEN a.loanBalance ELSE 0 END) as " +bank.getString("bankName")+"loanBalance" +
//                            ",max(CASE a.bank WHEN '"+ bank.getString("bankName")+"' THEN a.rate ELSE 0 END) as " +bank.getString("bankName")+"rate" +
//                            ",max(CASE a.bank WHEN '"+ bank.getString("bankName")+"' THEN a.bankCount ELSE 0 END) as " +bank.getString("bankName")+"bankCount";
//                }
//            }
////            if (Tools.notEmpty(values)){
////                values+=",sum(a.deposit_balance) as 合计deposit_balance" +
////                        ",sum(a.loanBalance) as 合计loan_balance" +
////                        ",convert(sum(a.deposit_balance)/sum(a.loan_balance)*100,decimal(18,2)) as 合计rate," +
////                        ",sum(a.bank) as 合计bankCount";
////            }
//            pd.put("values",values);
//            List<PageData> valueList = bankBalanceDao.report2(pd);
//            PageData pdvalue = new PageData();
//            pdvalue.put("valueList",valueList);
//            pdvalue.put("bankList",bankList);
//            objResult = new ObjResult(CommonCode.SUCCESS);
//            objResult.setPageData(pdvalue);
//        } catch (Exception e) {
//             LOGGER.error(ExceptionUtils.getStackTrace(e));
//            objResult = new ObjResult(CommonCode.ERROR);
//            return objResult;
//        }
//        return objResult;
//    }
//
//    public ListResult<PageData> report3(PageData pd) {
//        try {
//            int year = new Integer(pd.getString("year"));
//            int month = new Integer(pd.getString("month"));
//            if (month == 1){
//                year--;
//                month =12;
//                pd.put("lastYear",year);
//                pd.put("lastMonth",month);
//            }else {
//                month--;
//                pd.put("lastYear",year);
//                pd.put("lastMonth",month);
//            }
//            List<PageData> valueList = bankBalanceDao.report3(pd);
//            ListResult<PageData> Result = new ListResult<>(CommonCode.SUCCESS);
//            Result.setList(valueList);
//            return Result;
//        } catch (Exception e) {
//             LOGGER.error(ExceptionUtils.getStackTrace(e));
//            return new ListResult<>(CommonCode.ERROR);
//        }
//    }
//    /**
//     * 导入报表
//     *
//     * @param
//     * @throws Exception
//     */
//    public ObjResult uploadFile(MultipartHttpServletRequest request) {
//        ObjResult objResult;
//        UploadUtil uploadUtil = new UploadUtil();
//        String sql[] = {
//                "orgName",
//                "account",
//                "bank",
//                "openBank",
//                "bankType",
//                "openDate",
//                "depositBalance",
//                "loanBalance",
//                "opinions",
//                "remark",
//                "note"
//        };
//        String type[] = {"基本账户","一般账户","临时账户","专用账户"};
//        String typeWarning="";
//
//        String options[] = {"保留","拟撤销","已撤销"};
//        String optionsWarning="";
//        try {
////            按表格的标签名称导入
//            PageData pd = new PageData(request);
//            PageData p = new PageData();
//            MultipartFile mp = request.getFile("file");
//            if (mp != null) {
//                InputStream stream = mp.getInputStream();
//                //接收文件流
//                //将流给工作簿
//                Workbook book = null;
//                if ("application/vnd.ms-excel".equals(mp.getContentType())) {
//                    book = new HSSFWorkbook(stream);
//                } else {
//                    book = new XSSFWorkbook(stream);
//                }
//                //遍历sheet
//                List<PageData> list = new ArrayList<>();
//                Sheet sheet = book.getSheetAt(0);
//                String sheetname = sheet.getSheetName();
//
//                //遍历行
//                for (int rowNum = 3; rowNum <= sheet.getLastRowNum(); rowNum++) {
//                    Row row = sheet.getRow(rowNum);
//                    PageData pd_row = new PageData();
//                    if (null == row) {
//                        continue;
//                    }
//                    PageData p2 = new PageData();
//                    //遍历列
//
//                    for (int cellNum = 1; cellNum < row.getLastCellNum(); cellNum++) {
//
//                        Cell cell = row.getCell(cellNum);
//                        if (null == cell) {
//                            continue;
//                        }
//                        if (cellNum == 5){
//                            if(Arrays.asList(type).contains(uploadUtil.getCellValue(cell).trim())==false){
//                                if(Tools.isEmpty(typeWarning)){
//                                    typeWarning+="第"+(rowNum+1);
//                                }else {
//                                    typeWarning+="、"+(rowNum+1);
//                                }
//                            }
//                        }else if (cellNum == 9){
//                            if(Arrays.asList(options).contains(uploadUtil.getCellValue(cell).trim())==false){
//                                if(Tools.isEmpty(optionsWarning)){
//                                    optionsWarning+="第"+(rowNum+1);
//                                }else {
//                                    optionsWarning+="、"+(rowNum+1);
//                                }
//                            }
//                        }
//                        pd_row.put(sql[cellNum - 1], uploadUtil.getCellValue(cell).trim());
//                    }
//                    list.add(pd_row);
//                }
//
//                pd.put("valueList", list);
//                book.close();
//                stream.close();
//            }
//            if (Tools.isEmpty(optionsWarning)){
//                if (Tools.isEmpty(typeWarning)){
//                    objResult = new ObjResult(CommonCode.SUCCESS);
//                    objResult.setPageData(pd);
//                }else {
//                    typeWarning += "行，银行性质填写有误";
//                    objResult = new ObjResult(CommonCode.FAIL);
//                    objResult.setMessage(typeWarning);
//                }
//            }else {
//                if (Tools.isEmpty(typeWarning)){
//                    optionsWarning +="行，账户处理意见填写有误";
//                    objResult = new ObjResult(CommonCode.FAIL);
//                    objResult.setMessage(optionsWarning);
//                }else {
//                    typeWarning += "行，银行性质填写有误";
//                    optionsWarning +="行，账户处理意见填写有误";
//                    objResult = new ObjResult(CommonCode.FAIL);
//                    objResult.setMessage(typeWarning+"</br>"+optionsWarning);
//                }
//            }
//
//
//        } catch (Exception e) {
//             LOGGER.error(ExceptionUtils.getStackTrace(e));
//            objResult = new ObjResult(CommonCode.ERROR);
//        }
//        return objResult;
//    }
//
//
//}
//
